package thread;

import starter.Starter;
import billetterie.Trajet;

/**
 * Le rôle Thread pour accéder la gare. Le rôle Objet partagée pour que les
 * voyageurs puissent monter.
 */
public class Train extends Thread {
	
	public static int	CAPACITE_TRAIN		= 50;
	
	public static int	ARRET_TRAIN			= 15000;
	
	/**
	 * Compris entre 50 et 300
	 */
	public static int	VITESSE_TRAIN		= 300;
	
	/**
	 * Nombre de place disponbile maximum
	 */
	private int			nombrePlaceDisponible;
	
	/**
	 * Nombre de place réservé à partir de l'espace vente
	 */
	private int			nombrePlaceReservee	= 0;
	
	/**
	 * Nombre de voyageur monté
	 */
	private int			nombreVoyageur		= 0;
	
	private Trajet		trajet;
	
	private int			numeroTrain;
	
	public Train(int num, Trajet trajet) {
		numeroTrain = num;
		nombrePlaceDisponible = (int) (Math.random() * CAPACITE_TRAIN);
		this.trajet = trajet;
	}
	
	public void run() {
		try {
			sleep(10000 / VITESSE_TRAIN);
			Starter.gares.get(trajet.getDepart()).getEspaceQuai().accueillirTrain(this);
			sleep(ARRET_TRAIN);
			Starter.gares.get(trajet.getDepart()).getEspaceQuai().sortirTrain(this);
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public int getNbPlaceDisponible() {
		return nombrePlaceDisponible;
	}
	
	public void reserverPlace() {
		nombrePlaceReservee++;
	}
	
	public int getNombreReservation() {
		return nombrePlaceReservee;
	}
	
	public int getNombreVoyageur() {
		return nombreVoyageur;
	}
	
	public synchronized void monter(Voyageur voyageur) {
		nombreVoyageur++;
		System.out.println(voyageur.toString() + "a monté sur " + this.toString());
	}
	
	public Trajet getTrajet() {
		return trajet;
	}
	
	public String toString() {
		return "Train[" + numeroTrain + "]";
	}
	
}
